/* coded by e1r0nd 26.01.12 */
/* Placed in public domain	*/

function read_AJAX_books () {
	
	allFields = $( [] )
		.add( $("#favorites") )
		.add( $("#now") )
		.add( $("#read") )
		.add( $("#want") )
		.add( $("#dont") )
		.add( $("#quotes") ),
	allFields.html('<p align="center">идет загрузка данных...<br /><br /><br /><br /><img alt="warning" src="css/images/ajax-loader.gif" /></p>');
	
	$.ajax({ // Загрузить "Любимые"
		url: '/books.php',
		type: "POST",
		data: "list=favorites&uid="+uid,
		dataType: (jQuery.browser.msie) ? 'text' : 'xml', // проверка IE и выбор типа данных
		success: function(data){ Printout_books(data, 'favorites'); },
		complete: function(){
			$.ajax({ //Загрузить "Читаю"
				url: '/books.php',
				type: "POST",
				data: "list=now&uid="+uid,
				dataType: (jQuery.browser.msie) ? 'text' : 'xml', // проверка IE и выбор типа данных
				success: function(data){
					Printout_books(data, 'now');
					table_painting();
					edit_icons();
					AJAX_buttons();
				},
				complete: function(){
					$.ajax({ //Загрузить "Прочитанные"
						url: '/books.php',
						type: "POST",
						data: "list=read&uid="+uid,
						dataType: (jQuery.browser.msie) ? 'text' : 'xml', // проверка IE и выбор типа данных
						success: function(data){
							Printout_books(data, 'read');
							table_painting();
							edit_icons();
							AJAX_buttons();
						},
						complete: function(){
							$.ajax({ //Загрузить "Хочу прочитать"
								url: '/books.php',
								type: "POST",
								data: "list=want&uid="+uid,
								dataType: (jQuery.browser.msie) ? 'text' : 'xml', // проверка IE и выбор типа данных
								success: function(data){
									Printout_books(data, 'want');
									table_painting();
									edit_icons();
									AJAX_buttons();
								},
								complete: function(){
									$.ajax({ //Загрузить "Не хочу читать"
										url: '/books.php',
										type: "POST",
										data: "list=dont&uid="+uid,
										dataType: (jQuery.browser.msie) ? 'text' : 'xml', // проверка IE и выбор типа данных
										success: function(data){
											Printout_books(data, 'dont');
											table_painting();
											edit_icons();
											AJAX_buttons();
										}
									}).done(function(){
										table_painting(); // Раскраска таблички
										edit_icons(); // Иконки редактирования
										AJAX_buttons(); // AJAX действия на иконки
									});
								}
							});
						}
					});
				}
			});
		}
	});

	function Printout_books(xmlData, list) {
		var data;
		var result = '';
		
		if ( typeof xmlData == 'string') {
			// если это IE то создаем ActiveX объект и приобразуем строковую переменную в XML
			data = new ActiveXObject( 'Microsoft.XMLDOM');
			data.async = false;
			data.loadXML( xmlData);
		} else {
			data = xmlData;
		}
		// разбираем xml файл
		$('book',data).each(function(i, book){
			result += '\
			<tr id="book_'+$("id", book).text()+'">\
			<td>\
				<div class="edit">\
					<img id="id_edit_'+$("id", book).text()+'" alt="edit" src="css/images/edit.png" />\
					<img id="id_delete_'+$("id", book).text()+'" alt="delete" src="css/images/delete.png" />\
				</div>\
				<div class="book_content">\
					<strong>&laquo;'+$("title", book).text()+'&raquo;</strong> <em>'+$("author", book).text()+'</em><br />';
			rate = $("rate", book).text();
			result += '\
					<div id="stars" title="'+rate+' stars">';
			if (list == 'read') {
				for (var i=0; i<rate; i++) {
					result += '<img class="stars" src="css/images/star.png" />';
				}
				for (var i=rate; i<5; i++) {
					result += '\
						<img src="css/images/star_shadowed.png" />';
				}
			}
			result += '\
					</div>';
			if ($("notes", book).text()) {
				result += '\
					<span>'+$("notes", book).text()+'</span><br />\
					';
			}
			if (list != 'want' && list != 'dont') {
				var started_at = ($("started_at", book).text() == '01.01.1970') ? 'давным-давно' : $("started_at", book).text(),
					finished_at = ($("finished_at", book).text() == '01.01.1970') ? 'давным-давно' : $("finished_at", book).text();
				result += '<div class="date"><small><span>'+started_at+'</span> ... ';
				if (list != 'now') { result += '<span>'+finished_at+'</span></small>'; };
				result += '</div>';
			} else if (list == 'want') { result += '<div class="date"><small> может быть когда нибудь... <br /></small></div>';
			} else { result += '<div class="date"><small> никогда... <br /></small></div>'; };
			result += '\
				</div>\
			</td>\
			</tr>';
		});
		$("#"+list).html(result); //и вставляем его в html	
	}
	
	function AJAX_buttons() {
		$( "#dialog:ui-dialog" ).dialog( "destroy" );
		
		$( "#dialog-confirm" ).dialog({
			autoOpen: false,
			draggable: false,
			resizable: false,
			height: 160,
			modal: true,
			buttons: {
				"Удалить": function() {
					Remove_book(tag);
					$( this ).dialog( "close" );
				},
				"Отмена": function() {
					$( this ).dialog( "close" );
				}
			},
			hide: "fade"
		});
		
		$( 'img[alt|="delete"]' ).click(function() {
			tag = $(this).attr("id").slice(10);
			$( "#dialog-confirm" ).dialog( "open" );
		});
		
		$( 'img[alt|="edit"]' ).click(function() {
			tag = $(this).attr("id").slice(8);
			$("#title").removeClass( "ui-state-error" )
			.val($(this).parent().siblings(".book_content").children("strong").text().slice(1,-1));
			$("#author").removeClass( "ui-state-error" )
			.val($(this).parent().siblings(".book_content").children("em").text());
			$("#notes").val($(this).parent().siblings(".book_content").children("span").text());
			$("#rate").val($(this).parent().siblings(".book_content").children("#stars").attr("title").charAt(0));
			var rate = $("#rate").val();
			if ( rate > 5 ) {
				$( "#finished" ).hide();
				if ( rate > 6 ) {
					$( "#started" ).hide();
				}
			}
			if ( rate < 6) {
				$( "#started" ).show();
				$( "#finished" ).show();
			}
			var started_at = $(this).parent().siblings(".book_content").children("div.date").find("span:first").text();
			started_at = (/^([0-9.])+$/.test(started_at)) ? started_at : '';
			$("#started_at").val(started_at);
			var finished_at = $(this).parent().siblings(".book_content").children("div.date").find("span:last").text();
			finished_at = (/^([0-9.])+$/.test(finished_at)) ? finished_at : '';
			$("#finished_at").val(finished_at);
			$( "#dialog-add-book span" ).text("Редактировать");
			$( "#dialog-add-book input#todo" ).val("edit");
			$( "#dialog-add-book input#id_tag" ).val(tag);
			$( "#dialog-add-book" ).dialog( "open" );
		});
		
	}
	
	function Remove_book(tag) {
		$.ajax({
			url: '/books.php',
			type: "POST",
			data: "todo=del&id="+tag,
			success: function() {
				$("tr#book_"+tag+" div.edit").remove();
				$("tr#book_"+tag+" div.book_content")
				.empty()
				.append('<div align="center"><strong>Книга удалена<strong><br />&nbsp;</div>');
				setTimeout(function() {
					$("tr#book_"+tag+" div.book_content")
					.slideUp(1000, function() {
						$("tr#book_"+tag).remove();
						$(".listtable tr").removeClass("alt");
						$(".listtable tr:odd").addClass("alt");
						});
					}, 1000);
			}
		});
	}
	
	$( "#dialog-add-book" ).dialog({
		autoOpen: false,
		draggable: false,
		resizable: false,
		modal: true,
		buttons: {
			"Хорошо": function() {
				if (Check_input_book()) {
					Add_book();
					$( this ).dialog( "close" );
					
					allFields = $( [] )
						.add( $("#title") )
						.add( $("#author") )
						.add( $("#notes") )
						.add( $("#rate") )
						.add( $("#started_at") )
						.add( $("#finished_at") ),
					allFields.val('');
				}
			},
			"Отмена": function() {
				$( this ).dialog( "close" );
			}
		},
		hide: "fade"
	});
	
	function Check_input_book() {
		var title = $( "#title" ),
		author = $( "#author" ),
		notes = $( "#notes" ),
		started_at = $( "#started_at" ),
		finished_at = $( "#finished_at" ),
		allFields = $( [] ).add( title ).add( author ).add( notes ).add( started_at ).add( finished_at ),
		tips = $( "#validateTips" ),
		bValid = true;
		
		allFields.removeClass( "ui-state-error" );
		
		bValid = bValid && checkLength( title, 1, 99 );		
		bValid = bValid && checkLength( author, 3, 50 );
		bValid = bValid && checkLength( notes, 0, 250 );
		bValid = bValid && checkLength( started_at, 0, 10 );
		bValid = bValid && checkLength( finished_at, 0, 10 );
		bValid = bValid && checkRegexp( title, /^([0-9a-zA-Zа-яА-ЯёЁ .,-:\(\)])+$/, "Только буквы и простые символы" );
		bValid = bValid && checkRegexp( author, /^([a-zA-Zа-яА-ЯёЁ .-])+$/, "Допустимы только буквы и точка" );
		if (notes.val())
			bValid = bValid && checkRegexp( notes, /^([0-9a-zA-Zа-яА-ЯёЁ .,-:])+$/, "Только буквы и простые символы" );
		if (started_at.val())
			bValid = bValid && checkRegexp( started_at, /^([0-9.])+$/, "Допустимы только цифры и точка" );
		if (finished_at.val())
			bValid = bValid && checkRegexp( finished_at, /^([0-9.])+$/, "Допустимы только цифры и точка" );
		
		function updateTips( t ) {
			tips
				.text( t )
				.addClass( "ui-state-highlight" )
				.show();
			setTimeout(function() {
				tips.fadeOut(1000, function() {
					tips
					.html("&nbsp;")
					.removeClass( "ui-state-highlight" )
					.show();
				});
			}, 1500 );
		}

		function checkLength( o, min, max ) {
			if ( o.val().length > max || o.val().length < min ) {
				o.addClass( "ui-state-error" );
				updateTips( "От " + min + " симв. до " + max + "." );
				return false;
			} else {
				return true;
			}
		}

		function checkRegexp( o, regexp, n ) {
			if ( !( regexp.test( o.val() ) ) ) {
				o.addClass( "ui-state-error" );
				updateTips( n );
				return false;
			} else {
				return true;
			}
		}
		
		return bValid;
	}
	
	function Add_book() {
		
		$.post(
				'/books.php',
				{
					todo: $("#todo").val(),
					uid: uid,
					id: $("#id_tag").val(),
					title: $("#title").val(),
					author: $("#author").val(),
					notes: $("#notes").val(),
					rate: $("#rate").val(),
					started_at: $("#started_at").val(),
					finished_at: $("#finished_at").val()
				},
				function(data) {
					var rate = data.charAt(0);
					var id = data.slice(1);
					var list = '', select = 0;
					
					rate = parseInt(rate);
					if (rate == 0) {
						list = 'favorites';
						select = 0;
					}
					if (rate == 6) {
						list = 'now';
						select = 1;
					}
					if (rate > 0 && rate < 6) {
						list = 'read';
						select = 2;
					}
					if (rate == 7) {
						list = 'want';
						select = 3;
					}
					if (rate == 8) {
						list = 'dont';
						select = 4;
					}
					
					$.ajax({
						url: '/books.php',
						type: "POST",
						data: "list="+list+"&uid="+uid,
						dataType: (jQuery.browser.msie) ? 'text' : 'xml', // проверка IE и выбор типа данных
						success: function(result) {
							Printout_books(result, list);
							$( "#tabs" ).tabs( "select" , select ); //zero-based
							$("tr#book_"+id+" div.book_content").hide().slideDown(1000);
							}
					}).done(function(){
						table_painting(); // Раскраска таблички
						edit_icons(); // Иконки редактирования
						AJAX_buttons(); // AJAX действия на иконки
					});
				}
			);
	}
	
	$( "#dialog-restore-default" ).dialog({
		autoOpen: false,
		draggable: false,
		resizable: false,
		modal: true,
		buttons: {
			"Восстановить": function() {
				$.post(
					'/books.php',
					{ todo: "restore",
					  uid: uid
					}
				);
				window.location.reload();
			},
			"Отмена": function() {
				$( this ).dialog( "close" );
			}
		},
		hide: "fade"
	});
	
}
